﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BO;
using System.IO;
namespace Site_CamaraTibau
{
    public partial class frmProjetoLei : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Page.Form.Attributes.Add("enctype", "multipart/form-data");

                if (!Page.IsPostBack)
                {
                    TipoProjetoLeiBO.Listar(ddlTipoLei);

                    EntidadeBO.Listar(ddlEntidade);

                     ListItem removeItem= ddlEntidade.Items.FindByText("COMISSÃO");
                    if (removeItem != null)
                    {
                        ddlEntidade.Items.Remove(removeItem);
                    }


                    VereadorBO.Listar(ddlEntidadeVereador);

                    mtv.SetActiveView(viewListagem);
                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        #region Contexto
        ModeloContainer bco = new ModeloContainer();
        #endregion

        #region Funções
        public void pesquisar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {

                var objs = (from a in bco.ProjetoLeis select a).ToList();

                if (objs != null)
                {
                    if (!string.IsNullOrEmpty(txtPesquisarID.Text.Trim()))
                    {
                        int id = int.Parse(txtPesquisarID.Text.Trim());

                        objs = objs.FindAll(a => a.id == id).ToList();
                    }

                    if (!string.IsNullOrEmpty(txtPesquisarNumero.Text.Trim()))
                    {
                        string texto = txtPesquisarNumero.Text.Trim().ToLower();

                        objs = objs.FindAll(a => a.Numero.ToLower().Contains(texto)).ToList();
                    }


                }


                var objs2 = (from a in objs
                             orderby a.Numero ascending
                             select new
                             {
                                 ID = a.id,
                                 Numero = a.Numero
                             }).ToList();

                gvListagem.DataSource = objs2;
                gvListagem.DataBind();


                if (objs2.Count == 1)
                    lblNumeroLinhas.Text = "Foi encontrado " + objs2.Count + " registro.";
                else if (objs2.Count > 1)
                    lblNumeroLinhas.Text = "Foram encontrados " + objs2.Count + " registros.";
                else
                    lblNumeroLinhas.Text = "";

                mtv.SetActiveView(viewListagem);
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }

        }
        public void atualizaListagem()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {

                var objs = (from a in bco.ProjetoLeiAutors select a).ToList();

                if (objs != null)
                {
                    if (!string.IsNullOrEmpty(lblID.Text.Trim()))
                    {
                        int id = int.Parse(lblID.Text.Trim());

                        objs = objs.FindAll(a => a.idProjetoLei == id).ToList();
                    }

                }

                var objs2 = (from a in objs
                             orderby a.idVereador ascending
                             select new
                             {
                                 ID = a.id,
                                 Autor = a.Vereador.nome
                             }).ToList();

                gvAutores.DataSource = objs2;
                gvAutores.DataBind();

                if (objs2.Count > 0)
                    div_autores.Visible = true;
                else
                    div_autores.Visible = false;

                mtv.SetActiveView(viewFormulario);
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }

        }

        public void salvar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ProjetoLei obj = new ProjetoLei();

                if (!string.IsNullOrEmpty(lblID.Text))
                    obj.id = int.Parse(lblID.Text);

                obj.idTipoProjetoLei = int.Parse(ddlTipoLei.SelectedValue);
                obj.idEntidade = int.Parse(ddlEntidade.SelectedValue);

                obj.Numero = txtNumero.Text.Trim();
                obj.dtEntrada = DateTime.Parse(txtDtEntrada.Text);
                obj.Ementa = txtEmenta.Text.Trim();
                obj.Status = txtStatus.Text.Trim();

                if (FileUpload1.HasFile)
                {
                    obj.URL = FileUpload1.FileName;

                    string caminhoDoArquivoCompleto = HttpContext.Current.Server.MapPath("\\projetoLei\\" + FileUpload1.FileName);

                    if (File.Exists(caminhoDoArquivoCompleto))
                    {
                        throw new Exception("Já existe um arquivo com este nome!");
                    }
                    else
                    {
                        FileUpload1.SaveAs(caminhoDoArquivoCompleto);
                    }
                }
                else
                    obj.URL = "";

                ProjetoLeiBO.Salvar(obj);

                lblID.Text = obj.id.ToString();
                carregaForm(obj.id);

                lblSucesso.Text = "Registro salvo com sucesso!";
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void addAutor()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                

                ProjetoLeiAutor obj = new ProjetoLeiAutor();

                if (!string.IsNullOrEmpty(lblID.Text))
                    obj.idProjetoLei = int.Parse(lblID.Text);

                if (div_autores.Visible == true)
                {
                    if (ddlEntidadeVereador.SelectedIndex > 0)
                    {
                        obj.idVereador = int.Parse(ddlEntidadeVereador.SelectedValue);
                    }
                }

                if (bco.ProjetoLeiAutors.FirstOrDefault(x => x.idProjetoLei == obj.idProjetoLei && x.idVereador == obj.idVereador) == null)
                {
                    ProjetoLeiAutorBO.Salvar(obj);

                    atualizaListagem();

                    lblSucesso.Text = "Registro salvo com sucesso!";
                }
                else
                    throw new Exception("Este autor já foi adicionado a este Projeto Lei!");

                ddlEntidadeVereador.SelectedIndex = 0;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void excluir(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ProjetoLeiBO.Excluir(id);

                pesquisar();

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void excluirAutor(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ProjetoLeiAutorBO.Excluir(id);

                atualizaListagem();

                div_autores.Visible = true;

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void limpar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;
            lblID.Text = string.Empty;

            txtEmenta.Text = string.Empty;
            txtNumero.Text = string.Empty;
            txtDtEntrada.Text = string.Empty;
            txtStatus.Text = string.Empty;


            lkbVisualizar.Visible = false;
            lkbVisualizar.HRef = "";

            ddlEntidade.SelectedIndex = 0;
            ddlEntidadeVereador.SelectedIndex = 0;

            div_autores.Visible = false;

            ddlTipoLei.SelectedIndex = 0;
        }

        public void carregaForm(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ProjetoLei obj = ProjetoLeiBO.Selecionar(id);

                if (obj != null)
                {
                    lblID.Text = obj.id.ToString();

                    txtEmenta.Text = obj.Ementa;
                    txtNumero.Text = obj.Numero;
                    txtDtEntrada.Text = obj.dtEntrada.ToShortDateString();
                    txtStatus.Text = obj.Status;

                    ddlTipoLei.SelectedValue = obj.idTipoProjetoLei.ToString();
                    ddlEntidade.SelectedValue = obj.idEntidade.ToString();

                    OnSelectedIndexChanged_ddlEntidade();


                    if (!string.IsNullOrEmpty(obj.URL))
                    {
                        lkbVisualizar.Visible = true;
                        lkbVisualizar.Attributes.Add("href", "~/projetoLei/" + obj.URL);
                    }
                    else
                        lkbVisualizar.Visible = false;

                    mtv.SetActiveView(viewFormulario);
                }
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        #endregion

        #region Eventos do formulario

        #region Grids

        protected void gvListagem_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdEditar"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                carregaForm(id);
            }
            else if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluir(id);
            }
        }
        protected void gvListagem_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvListagem.PageIndex = e.NewPageIndex;
            pesquisar();
        }
        protected void gvListagem_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }

        protected void gvAutores_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluirAutor(id);
            }
        }
        protected void gvAutores_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvListagem.PageIndex = e.NewPageIndex;
            pesquisar();
        }
        protected void gvAutores_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }

        #endregion

        #region Botões
        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            pesquisar();
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            limpar();
            mtv.SetActiveView(viewFormulario);
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            pesquisar();
            mtv.SetActiveView(viewListagem);
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            salvar();
        }

        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        protected void btnAddAutor_Click(object sender, EventArgs e)
        {
            try
            {
                addAutor();
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
           
        }

        
        #endregion

        public void OnSelectedIndexChanged_ddlEntidade()
        {
            try
            {
                if (ddlEntidade.SelectedIndex > 0)
                {
                    if (ddlEntidade.SelectedItem.Text.ToUpper() == "VEREADOR")
                    {
                        div_autores.Visible = true;
                    }
                    else
                    {
                        div_autores.Visible = false;
                    }
                }
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }
        protected void OnSelectedIndexChanged_ddlEntidade(object sender, EventArgs e)
        {
            try
            {
                OnSelectedIndexChanged_ddlEntidade();
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }

        protected void viewListagem_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Pesquisar";
        }

        protected void viewFormulario_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Salvar";
        }


        #endregion
    }

}